package ar.com.cubika.trainees.collections;

import org.apache.commons.beanutils.MethodUtils;
import org.apache.commons.collections.Predicate;

public class MethodEqualsObjectPredicate implements Predicate {
	private Object value;
	private String selector;
	
	/**
	 * Construye un nuevo Predicate que compara el resultado de enviar 
	 * un mensaje con un objeto predeterminado 
	 * @param value el objeto a comparar
	 * @param selector el selector del mensaje a enviarle 
	 */
	public MethodEqualsObjectPredicate(Object value, String selector) {
		this.value = value;
		this.selector = selector;
	}


	public boolean evaluate(Object obj) {
		Object currentValue;
		try {
			currentValue = MethodUtils.invokeMethod(obj, selector, new Object[] {});
		} catch (Exception e) {
			return false;
		}
		return value.equals(currentValue);
	}

}
